In [1]:
# a szokásos rutinok betöltése
%pylab inline
from scipy.integrate import * # az integráló rutinok betöltése
from ipywidgets import *  # az interaktivitásért felelős csomag

import matplotlib.pyplot as plt 


from IPython.core.display import HTML
Populating the interactive namespace from numpy and matplotlib
In [2]:
HTML('''<script>
code_show=true;
function code_toggle() {
 if (code_show){
 $('div.input').hide();
 } else {
 $('div.input').show();
 }
 code_show = !code_show
}
$( document ).ready(code_toggle);
</script>
<form action="javascript:code_toggle()"><input type="submit"
value="Click here to toggle on/off the raw code."></form>''')
Out[2]:

Felhasznált irodalom:

David C. Johnston: Thermodynamic Properties of the van der Waals Fluid, https://arxiv.org/abs/1402.1205

In [3]:
rc('text', usetex=True)  # az abran a xticks, yticks fontjai LaTeX fontok lesznek 
In [4]:
# a szamolas a 
# '''/home/cserti/okt/Termo/JEGYZET_CsJ/VanderWaals/elmelet_and_ref/VdW_paper_cond_mat_1402.1205.pdf
# cikk alapjan megy
In [5]:
def f(y):
    # Ez a fv y=0-nal szingularis, de a hatarerteke 1/2 
    #  ha y egy array, akkor a sima if nem jo
    tmp=zeros_like(y)
    tmp[y==0]=1/2
    z=y[(y!=0)];
    tmp[(y!=0)]=(z*cosh(z)-sinh(z))/(sinh(z)*cosh(z)-z)
    
    return tmp
#    if y==0.:
#        return 1
#    else:
#        return (y*cosh(y)-sinh(y))/(sinh(y)*cosh(y)-y)
    

def g(y):
    tmp = 1+2*f(y)*cosh(y)+f(y)*f(y)
    return(tmp)
In [6]:
def T_coex(y):
    tmp=27*f(y)*(f(y)+cosh(y))/4/(g(y))**2
    return(tmp)

def p_coex(y):
    tmp=27*f(y)*f(y)*(1-f(y)*f(y))/(g(y))**2
    return(tmp)

def Vg_coex(y):
    tmp= 1/3*(1+exp(y)/f(y))
    return(tmp)

def Vf_coex(y):
    tmp= 1/3*(1+exp(-y)/f(y))
    return(tmp)

def dpdT_coex(y):
    # Ez a fv y=0-nal szingularis, de a hatarerteke 1 
    #  ha y egy array, akkor a sima if nem jo
    tmp=zeros_like(y)
    tmp[y==0]=4
    z=y[(y!=0)];
    tmp[(y!=0)]=16*z*(z*cosh(z)/sinh(z)-1)/(sinh(2*z)-2*z)

    return(tmp)

def Latent_ho(y):
    tmp = 16 * y * T_coex(y)/3
    return(tmp)
In [7]:
def homerseklet(V,p):  
    tmp=(p+3/V**2)*(3*V-1)/8
    return (tmp)
In [8]:
def entropia(V,T): 
    tmp = 3/2*log(T)+log(3*V-1) 
    return (tmp)
In [9]:
#Np=100
#yl = linspace(0.,3,Np)
#plot(yl,f(yl))
#grid();
In [10]:
# Abra es fontmeretek
xfig_meret= 9   #    12 nagy abrahoz
yfig_meret= 6    #   12 nagy abrahoz
xyticks_meret= 15  #  20 nagy abrahoz
xylabel_meret= 21  #  30 nagy abrahoz
legend_meret= 21   #  30 nagy abrahoz

A folyadék-gőz fázist elválasztó p − T fázisgörbe van der Waals-állapotegyenletre

In [11]:
Np=100
yl = linspace(0.0,1.3,Np)

figure(figsize=(8,6))

plot(T_coex(yl),p_coex(yl),'b-',lw=2);

plot([1],[1],'ro')

#title(r'$p(T)$ f\'azisdiagram',fontsize=20)

text(0.97,1.05,'Kritikus pont',fontsize=20,color='red')
text(0.83,0.75,r'folyad\'ek f\'azis',fontsize=20,color='black')
text(0.97,0.75,r'g\'az (g\H oz) f\'azis',fontsize=20,color='black')

xlabel(r'$\hat{T}$',fontsize=xylabel_meret)
ylabel(r'$\hat{p}$',fontsize=xylabel_meret)

xlim(0.8,1.1)
ylim(0,1.25);
xticks(fontsize=15)
yticks(fontsize=15);

#ylim(0.,1.1)
grid();

#savefig('pT_VdW_abra_mod.eps');  # Abra kimentese
In [12]:
# a koegszisztencia gorbe adatainak kiiratasa egy file-ba a Lekner-fele y parameterezessel

Np=100
yl = linspace(0.0,15,Np+1)

#savetxt('coex_data_python.dat',c_[yl, T_coex(yl),p_coex(yl),Vf_coex(yl), Vg_coex(yl)],delimiter='\t',fmt='%10.5f',
#       header='''/home/cserti/okt/Termo/JEGYZET_CsJ/VanderWaals/elmelet_and_ref/VdW_paper_cond_mat_1402.1205.pdf
#y \t T_coex \t p_coex \t Vf_coex \t Vg_coex''')


#/home/cserti/okt/Termo/JEGYZET_CsJ/VanderWaals/elmelet_and_ref/VdW_paper_cond_mat_1402.1205.pdf

Entrópia van der Waals-gázra

In [13]:
#  Lekner parametrization T < T_c eseten
#  speci y ertekek, melyekre a koegszisztancia nyomas 0.55, 0.6, 0.7, 0.8, 0.9, 1

y_rep=array([1.184302,1.091405,0.90708,0.714124,0.488685,0])
p_down=(p_coex(y_rep))
#print('p_down =',p_down)
#print (' p < p_c = [' + ', '.join('%9.7f' % v for v in p_down) + ']')
In [14]:
figsize(xfig_meret,yfig_meret)


# Az S entropia a  T < Tc alatt 
Npont=50

(Vmin,Vmax)=(0.35,6)

for i in range(len(p_down)):
    Vf=Vf_coex(y_rep[i])
    Vg=Vg_coex(y_rep[i])
    T0 = T_coex(y_rep[i])
    pp = p_down[i]
    #print("p,  Vf, T0= ",pp, Vf,T0)
    
    # folyadek entropiaja
    VV=linspace(Vmin,Vf,Npont) #mintavételezési pontok legyártása
    plot(homerseklet(VV,pp),entropia(VV,homerseklet(VV,pp)),'b-',lw=2)
    
    # entropia ugras
    Sf=entropia(Vf,homerseklet(Vf,pp))
    Sg=entropia(Vg,homerseklet(Vg,pp))

    plot([T0,T0],[Sf,Sg],'b-',lw=2)

    # goz entropiaja
    VV=linspace(Vg,Vmax,Npont) #mintavételezési pontok legyártása
    plot(homerseklet(VV,pp),entropia(VV,homerseklet(VV,pp)),'b-',lw=2)

#  Az S entropia a  T > Tc folott 
p_up = array([1.1, 1.2, 1.3])
(Vmin,Vmax)=(0.35,4.0)
Npont=1000
VV=linspace(Vmin,Vmax,Npont) #mintavételezési pontok legyártása

for p in p_up:
    
    plot(homerseklet(VV,p),entropia(VV,homerseklet(VV,p)),'r--',lw=2)

annotate(r'$p/p_c$', xy=(1.2, 0.5), xytext=(0.8, 2.4),
         arrowprops=dict(color='k',width=1),fontsize=20)

xylabel_meret=20

#legend(loc='upper right',fontsize=legend_meret)

xlabel(r'$T/T_c$',fontsize=xylabel_meret)
ylabel(r'$\Delta S/nR$',fontsize=xylabel_meret)
xticks(fontsize=xyticks_meret)
yticks(fontsize=xyticks_meret);

xlim(0.6,1.5)
ylim(-3,3.2)

#ax = gca()
#ax.yaxis.set_label_coords(-0.15, 0.65);  #  ylabel position 
#title(r'$E(T)$ ', fontsize=20)

x = list(p_down)+list(p_up) 
print (' p = [' + ', '.join('%7.5f' % v for v in x) + ']')

grid();

#savefig('S_entropia_abra.eps');  # Abra kimentese
 p = [0.55000, 0.60000, 0.70000, 0.80000, 0.90000, 1.00000, 1.10000, 1.20000, 1.30000]

Sűrűségkülönbség hőmérsékletfüggése:

$\varrho_f-\varrho_g \sim \frac{1}{V_f} - \frac{1}{V_g}$

In [15]:
Np=100
yl = linspace(0.0,10.,Np)

n_coex=1/Vf_coex(yl)-1/Vg_coex(yl)
plot(T_coex(yl),n_coex,lw=2);

xylabel_meret=20
xlabel(r'$T/T_c$',fontsize=xylabel_meret)
ylabel(r'$(\varrho_f-\varrho_g)/\varrho_c$',fontsize=xylabel_meret)
xticks(fontsize=xyticks_meret)
yticks(fontsize=xyticks_meret);

#ylim(0.,1.1)
grid();

#savefig('suruseg-diff_abra.eps');  # Abra kimentese

Folyadék és gáz fázishatár, $T-\varrho$

In [16]:
Np=100
yl = linspace(0.0,10.,Np)

n_f = 1/Vf_coex(yl)
n_g = 1/Vg_coex(yl)

plot(n_f,T_coex(yl),'b--',lw=2);
plot(n_g,T_coex(yl),'r-',lw=2);

xylabel_meret=20
xlabel(r'$\varrho$',fontsize=xylabel_meret)
ylabel(r'$T/T_c$',fontsize=xylabel_meret)

text(2.4,0.7,r'folyad\'ek',fontsize=20,color='blue')
text(0.17,0.9,r'g\'az',fontsize=20,color='red')
text(0.9,0.5,r'g\'az + folyad\'ek',fontsize=20,color='k')

xticks(fontsize=xyticks_meret)
yticks(fontsize=xyticks_meret);

ylim(0.,1.2)
grid();

#savefig('suruseg-f-g_abra.eps');  # Abra kimentese

Látens hő hőmérsékletfüggése:

$L = T_0 (S_g-S_f)$, ahol $T_0$ az átalakulás hőmérséklete, $S_g, S_f$ a gáz és a folyadék fázis entrópiája

In [17]:
Np=100
yl = linspace(0.,4,Np)
plot(T_coex(yl),Latent_ho(yl),lw=2)

xylabel_meret=20
xlabel(r'$T/T_c$',fontsize=xylabel_meret)
ylabel(r'$L/p_c V_c$',fontsize=xylabel_meret)

xticks(fontsize=xyticks_meret)
yticks(fontsize=xyticks_meret);
ylim(0.,10.)

grid();

#savefig('Latens-ho_abra.eps');  # Abra kimentese
In [ ]: